﻿namespace SmartPlant.WinCore
{
    /// <summary>
    /// 类的属性描述信息。会用于动态创建类<see cref="DynamicClassHelper.CreateDynamicType(string, System.Collections.Generic.List{DynamicPropertyInfo})"/>
    /// </summary>
    public class DynamicPropertyInfo
    {
        /// <summary>
        /// 属性列主键。
        /// </summary>
        public decimal ItemAttributionId { get; set; } = 0m;

        /// <summary>
        /// 属性类型。到时候会依靠xxx.cs自动生成类
        /// </summary>
        public string PropertyType { get; set; } = string.Empty;

        /// <summary>
        /// 属性名。到时候会依靠xxx.cs自动生成类。对应<see cref="GridViewColumn.UniqueName"/>
        /// </summary>
        public string PropertyName { get; set; } = string.Empty;

        /// <summary>
        /// 属性默认值。到时候会依靠xxx.cs自动生成类
        /// </summary>
        public string PropertyDefaultValue { get; set; } = string.Empty;

        /// <summary>
        /// 是否显示。1代表显示。0代表不显示 
        ///</summary>
        public bool IsVisible { get; set; } = false;

        /// <summary>
        /// 是否显示。1代表不能编辑。0代表可以编辑 
        ///</summary>
        public bool IsReadOnly { get; set; } = false;

        /// <summary>
        /// 用于前端显示的名称。 
        /// 对应<see cref="ViewQueryItemAttr.DisplayName 或 OrigDisplayName"/>。
        /// 对应<see cref="GridViewColumn.Header"/>
        /// </summary>
        public string DisplayName { set; get; } = string.Empty;

        /// <summary>
        /// 显示排序。对应<see cref="ViewQueryItemAttr.SeqNum"/>
        /// </summary>
        public decimal? Order { set; get; } = 0;

        /// <summary>
        /// 显示的宽度。
        /// </summary>
        public int? Width { set; get; } = 100;

        /// <summary>
        /// 是否分组。
        /// </summary>
        public bool IsGroup { get; set; } = false;

        /// <summary>
        /// 给前端用的，是否为主键
        /// </summary>
        public bool PrimaryKey { get; set; } = false;


        /// <summary>
        /// 给前端用的，用于指示是否为下拉
        /// </summary> 
        public bool IsDropDown { get; set; } = false;

        /// <summary>
        /// 比如L1542,E2032等
        /// </summary>
        public string ATTRIBUTE_DATATYPE { get; set; } = string.Empty;

        /// <summary>
        /// 真正要更新的column。如loop_id。给前端用的属性名有另外一个<see cref="WPF_UniqueName"/>。
        /// <see cref="Uniqueatts.UniqueName"/>。对应<see cref="CellColMap.SPIColName"/>
        /// </summary>
        public string SPIColName { set; get; }

        /// <summary>
        /// 即这个属性真正要更新的表的位置。
        /// <see cref="Entities.EntityName"/>，对应<see cref="CellColMap.SPITableName"/>
        /// </summary>
        public string SPITableName { set; get; }
    }
}
